﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Net;
using System.IO;

public partial class paySuccess : CommonPage
{
    String sKey, sValue, fname, lname, mc_gross, itemName, Pmtcurrency, itemNumber, payer_email, receiver_email, txn_id;
    String item_name1;
    String authToken, txToken, query;
    String strResponse;
    string url = "";
    VLGDataContext _dbpp = new VLGDataContext();

    protected void Page_Load(object sender, EventArgs e)
    {
        /*
         * set this to the value of the PDT token for your account
         * see http://paypaltech.com/PDTGen/PDTtokenhelp.htm for help with this
        */
        if (String.Compare(ConfigurationManager.AppSettings["UseSandbox"].ToString(), "true", false) == 0)
        {
            url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
        }
        else
        {
            url = "https://www.paypal.com/cgi-bin/webscr";
        }
        //id token lấy trong thông tin tài khoản paypal--> profile --> web reference
        authToken = ConfigurationManager.AppSettings["authToken"].ToString();//"q9yWtGCLzZxNLcB_on1Ao9GhozolbYtE19jEQBcAd2jp-v70RA6IA-yQcY0";
        //read in txn token from querystring
        txToken = Request.QueryString.Get("tx");


        //:::sanity check
        //Response.Write(txToken);

        query = "cmd=_notify-synch&tx=" + txToken + "&at=" + authToken;


        // Create the request back
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

        // Set values for the request back
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = query.Length;

        // Write the request back IPN strings
        StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
        stOut.Write(query);
        stOut.Close();

        // Do the request to PayPal and get the response
        StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());
        strResponse = stIn.ReadToEnd();
        stIn.Close();

        //:::sanity check:::
        //Response.Write("PDT returned: " + strResponse + "<p></p>");


        // If response was SUCCESS, parse response string and
        //output details
        if (strResponse.Substring(0, 7) == "SUCCESS")
        {
            //split response into string array using whitespace
            //as delimiter
            String[] StringArray = strResponse.Split();


            // NOTE:
            /*
            * loop is set to start at 1 rather than 0 because first
            string in array will be single word SUCCESS or FAIL
            and there is no splitting of this...so we will skip the
            first string and go to the next.
            */

            // use split to split array we already have
            // using "=" as delimiter
            int i;
            for (i = 1; i < StringArray.Length - 1; i++)
            {
                String[] StringArray1 = StringArray[i].Split('=');

                sKey = StringArray1[0];
                sValue = StringArray1[1];

                // set string vars to hold variable names using a switch
                switch (sKey)
                {
                    case "first_name":
                        fname = sValue;
                        break;

                    case "last_name":
                        lname = sValue;
                        break;

                    case "mc_gross":
                        mc_gross = sValue;
                        break;

                    case "item_name":
                        itemName = sValue;
                        break;

                    //for shopping cart payments the
                    //item_name vars are numbered to reflect
                    //a multi-item purchase.
                    case "item_name1":
                        item_name1 = sValue;
                        break;

                    case "mc_currency":
                        Pmtcurrency = sValue;
                        break;
                    case "item_number":
                        itemNumber = sValue;
                        break;
                    case "payer_email":
                        payer_email = sValue;
                        break;
                    case "receiver_email":
                        receiver_email = sValue;
                        break;
                    case "txn_id":
                        txn_id = sValue;
                        break;
                }
            }

            int idAccountMua= int.Parse(Request.QueryString["acCode"].ToString());
            // TẠO ORDER
            // Tao chuoi kick hoat gom 15 chu so
            string chuoiActive = AllCode.Utils.Mahoa(AllCode.Utils.TaoChuoiNgauNhien(15));
            // tao ID Don Hang : VLG-NgayThangNam
            string ngaythang = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Ticks.ToString().Substring(0, 11);
            string idDonHang = "VLG" + ngaythang;
            // Lấy thong tin người bán tại đây ------------------
            Gig gpp = _dbpp.Gigs.Single(ll => ll.idGig == int.Parse(itemNumber));
            string emailNguoiBan = gpp.VLGAccount.Email;
            string idnguoiBan = gpp.VLGAccount.idAcc.ToString();

            float gia = float.Parse(mc_gross.ToString());
            try
            {
                Order oder = new Order()
                {
                    idDH = idDonHang,
                    idGig = int.Parse(itemNumber),
                    idAcc = idAccountMua,
                    GiaTien = gia,
                    NgayDat = DateTime.Now,
                    Status = 0, // chua kick hoat
                    ChuoiKichHoat = chuoiActive,
                    DaGuiMail = 0,
                    Type = 0, //thanh toán paypal
                    EmailNguoiMua=payer_email,
                    SellerActive = false,
                    CustomerActive = false,
                    SellerConfirm = false,
                    CustomerConfirm = false,
                    DaThanhToan = false,
                    CustomerReject=false,
                    SellerReconfirm=false,
                    rate=false
                };
                _dbpp.Orders.InsertOnSubmit(oder);
                _dbpp.SubmitChanges();

                // Lưu thông tin vào bảng Yêu cầu chuyen khoản
                YeuCauChuyenKhoan ycck = new YeuCauChuyenKhoan()
                {
                    ngay = DateTime.Now,
                    soTien = gia,
                    status = true,
                    type = (int)EnumChuyenKhoanType.MuaPP,
                    idDH = idDonHang,
                    idAcc=idAccountMua
                };
                _dbpp.YeuCauChuyenKhoans.InsertOnSubmit(ycck);
                _dbpp.SubmitChanges();
                // Lấy đơn hàng ra cập nhật lại
                Order ord = _dbpp.Orders.Single(lpm => lpm.idDH == idDonHang);
                // Xây dựng cho Email 
                int index = Request.Url.AbsoluteUri.IndexOf("paySuccess.aspx");
                String UserActivateUrlBuyer = Request.Url.AbsoluteUri.Substring(0, index) + "submitOrder.aspx?icc=" + Customer.idAcc + "&code=" + chuoiActive + "&order=" + idDonHang;
                String UserActivateUrlSeller = Request.Url.AbsoluteUri.Substring(0, index) + "submitOrder.aspx?icc=" + idnguoiBan + "&code=" + chuoiActive + "&order=" + idDonHang;
                String urlweb = "<a href=\"http://www.vieclamgap.net\"></a>";
                String subject = "Xác nhận Đơn hàng trên Việc Làm Gấp !";
                //MessageBox(UserActivateUrlSeller + "___" + UserActivateUrlBuyer);
                try
                {
                    // Gửi cho Người MUA

                    String emailNguoiMua = Customer.Email;
                    String body = String.Format(@"<p style='font-size:14px;'>Chào bạn, bạn hay ai đó đã tạo tài khoản trên trang {0}.
                                                            Vui lòng click vào link bên dưới để xác nhận bạn là người đã đặt đơn hàng này.<br/><br/>
                                                            <a href='{1}'>Click vào đây để xác nhận !!! </a><br/><br/> 
                                                            hoặc copy và paste link này vào trình duyệt : {2}
                                                            <p style='font-size:14px'>Nếu bạn không kích hoạt trong vòng <b>2 ngày</b> kể từ ngày Email này được gửi đi - {3} - thì bạn phải kích hoạt lại.<br/><br/> Cảm ơn !", urlweb, UserActivateUrlBuyer, UserActivateUrlBuyer, DateTime.Now);
                    GoogleMailer.Send(emailNguoiMua, subject, body);
                    ord.DaGuiMail = 1;
                    // MessageBox("Đã gửi Email kích hoạt cho bạn");
                    // lblThongbaoKQ.Text="Email đã được gửi đi ! Hãy kiểm tra Email để xác nhận đơn hàng";
                }
                catch (Exception ccac)
                {
                    //Response.Write("Loi them Orderr" + ccac.Message);
                    lblThongbaoKQ.Text = ("Email xác nhận chưa được gửi đi. Vui lòng liên hệ bộ phận Support.") + "ID Order của bạn là:" + idDonHang;
                }
                try
                {
                    // Gửi cho Người BÁN
                    String body2 = String.Format(@"<p style='font-size:14px;'>Chào bạn , có người đặt mua Dịch vụ của bạn trên {0}.
                                                            Vui lòng click vào link bên dưới để xác nhận bạn ĐỒNG Ý nhận đơn đặt hàng này.<br/><br/>
                                                            <a href='{1}'>Click vào đây để xác nhận !!! </a><br/><br/> 
                                                            hoặc copy và paste link này vào trình duyệt : <a>{2}</a>
                                                            <p style='font-size:14px'>Nếu bạn không kích hoạt trong vòng <b>2 ngày</b> kể từ ngày Email này được gửi đi - <b>{3}</b> - thì bạn phải kích hoạt lại.<br/><br/> Cảm ơn !", urlweb, UserActivateUrlSeller, UserActivateUrlSeller, DateTime.Now);
                    GoogleMailer.Send(emailNguoiBan, subject, body2);
                    ord.DaGuiMail = 2;
                    //MessageBox("Đã gửi email kích hoạt cho người bán");
                }
                catch
                {
                    // MessageBox("Email kích hoạt chưa được gửi đi. Vui lòng liên hệ bộ phận Support");
                }

                _dbpp.SubmitChanges();
                Cart.Clear();
                lblThongbaoKQ.Text = "Tạo đơn hàng thành công";
                Label1.Text = " Vui lòng kiểm tra Email để xác nhận ! Cảm ơn bạn đã sử dụng dịch vụ của chúng tôi !";
                homea.Attributes.CssStyle.Add("display","block");
                               
            }
            catch { }
        }
        
        else if (strResponse.Substring(0, 4) == "FAIL")
        {
            // if response is FAIL, print it to screen
           // Response.Write(strResponse);
            lblThongbaoKQ.Text = "Có lỗi trong quá trình thanh toán. Vui lòng thử Đặt Hàng lại sau ít phút";
            Label1.Text = "Cảm ơn";
        }

        else
        {
            // some unexpected response??? -  log it
            // for investigation later.

        }

    }
}